package com.stream;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

/**
 * Created by
 *  stream流：来自数据源的元素队列
 *      特征： 中间操作都会返回流的本身
 *            内部迭代 流可以直接调用遍历的方法
 *   Stream流的获取方式：
 *              所有的collection集合都可以使用stream()获取流
 *              可以通过Stream中的of静态方法获取流 （该方法可以传递可变参数）  --可以将数组获取stream流对象
 *              map集合可以先转换为set，在获取stream
 *
 *   Stream流中的方法分为： 延迟方法 返回值类型仍然为Stream接口自身类型的方法
 *                       终结方法  返回值不再是stream接口自身类型的方法 如foreach()、count()方法等
 *
 *   stream流使用完后就关闭了
 *    stream常用的方法：
 *             foreach方法 遍历流中的数据  是终结方法，遍历后就不能继续调用stream流中的其他方法
 *             map方法     将流中的元素映射到另一个流中（实质使用function中的R apply(T t)这个转换的方法）
 *             count()     统计stream中元素的个数，终结方法
 *             limit(long maxsize)  对流进行截取，只取前面maxsize个元素（该方法只在集合长度大于参数时进行截取，否则不截取），返回新的流
 *             skip(long n)  跳过前面n个元素，获取到一个新的流（如果流的长度小于n，则会得到一个长度为0的空流）
 *             concat(Stream s1,Stream s2)     将两个流组合到一起
 *
 *
 *
 *
 * @author touni
 * @date 2019/4/29
 * @time 12:36
 */
public class DemoStream {


    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张丹");
        list.add("李四");
        list.add("王五");
        list.add("六六六");
        list.add("时所得到的多多");

        //            filter过滤集合                   foreach循环遍历输出前面filter过滤后的集合
        list.stream().filter((str)->str.startsWith("张")).forEach((str)-> System.out.println(str));
        //获取map的stream流
        Map<String,String> map = new HashMap<>();
        map.put("ssss","asss");
        map.put("23","a33");
        map.put("2333","a3ee");
        map.entrySet().stream().forEach((stringEntry)-> System.out.println(stringEntry));
        System.out.println("===============华丽的分割线================");

        //获取数组的流
        String[] strArr = {"ass","asasa","assac","axcv"};
        Stream.of(strArr).forEach((str)-> System.out.println(str));
















    }





}
